package cn.zxinrun.wps.example;

import cn.zxinrun.wps.annotation.Excel;
import cn.zxinrun.wps.annotation.ExcelHeader;
import cn.zxinrun.wps.enums.ColumnTypeEnum;
import cn.zxinrun.wps.enums.TypeEnum;
import lombok.Data;
import org.apache.poi.ss.usermodel.IndexedColors;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 复杂表头示例类
 * 演示如何使用 @ExcelHeader 注解创建多行表头、合并单元格等复杂表头结构
 * @author Mr.Zhang
 * @since 1.0
 **/
@Data
public class ComplexHeaderExample {

    /**
     * 基本信息 - 姓名
     * 表头配置：第一行显示"基本信息"，第二行显示"姓名"
     * 列合并：第0列到第1列合并显示"基本信息"
     */
    @ExcelHeader(
        rows = {"基本信息", "姓名"},
        columnMerge = "0:1",
        backgroundColor = IndexedColors.LIGHT_BLUE,
        fontSize = 12
    )
    @Excel(name = "姓名", sort = 1, type = TypeEnum.EXPORT)
    private String name;

    /**
     * 基本信息 - 年龄
     * 表头配置：第一行显示"基本信息"，第二行显示"年龄"
     */
    @ExcelHeader(
        rows = {"基本信息", "年龄"},
        backgroundColor = IndexedColors.LIGHT_BLUE,
        fontSize = 12
    )
    @Excel(name = "年龄", sort = 2, type = TypeEnum.EXPORT)
    private Integer age;

    /**
     * 基本信息 - 性别
     * 表头配置：第一行显示"基本信息"，第二行显示"性别"
     */
    @ExcelHeader(
        rows = {"基本信息", "性别"},
        backgroundColor = IndexedColors.LIGHT_BLUE,
        fontSize = 12
    )
    @Excel(name = "性别", sort = 3, type = TypeEnum.EXPORT)
    private String gender;

    /**
     * 联系信息 - 电话
     * 表头配置：第一行显示"联系信息"，第二行显示"电话"
     * 列合并：第3列到第4列合并显示"联系信息"
     */
    @ExcelHeader(
        rows = {"联系信息", "电话"},
        columnMerge = "3:4",
        backgroundColor = IndexedColors.LIGHT_GREEN,
        fontSize = 12
    )
    @Excel(name = "电话", sort = 4, type = TypeEnum.EXPORT)
    private String phone;

    /**
     * 联系信息 - 邮箱
     * 表头配置：第一行显示"联系信息"，第二行显示"邮箱"
     */
    @ExcelHeader(
        rows = {"联系信息", "邮箱"},
        backgroundColor = IndexedColors.LIGHT_GREEN,
        fontSize = 12
    )
    @Excel(name = "邮箱", sort = 5, type = TypeEnum.EXPORT)
    private String email;

    /**
     * 财务信息 - 工资
     * 表头配置：第一行显示"财务信息"，第二行显示"工资"
     * 列合并：第5列到第6列合并显示"财务信息"
     */
    @ExcelHeader(
        rows = {"财务信息", "工资"},
        columnMerge = "5:6",
        backgroundColor = IndexedColors.LIGHT_YELLOW,
        fontSize = 12
    )
    @Excel(name = "工资", sort = 6, type = TypeEnum.EXPORT, cellType = ColumnTypeEnum.NUMERIC, scale = 2)
    private BigDecimal salary;

    /**
     * 财务信息 - 奖金
     * 表头配置：第一行显示"财务信息"，第二行显示"奖金"
     */
    @ExcelHeader(
        rows = {"财务信息", "奖金"},
        backgroundColor = IndexedColors.LIGHT_YELLOW,
        fontSize = 12
    )
    @Excel(name = "奖金", sort = 7, type = TypeEnum.EXPORT, cellType = ColumnTypeEnum.NUMERIC, scale = 2)
    private BigDecimal bonus;

    /**
     * 时间信息 - 入职时间
     * 表头配置：第一行显示"时间信息"，第二行显示"入职时间"
     * 列合并：第7列到第8列合并显示"时间信息"
     */
    @ExcelHeader(
        rows = {"时间信息", "入职时间"},
        columnMerge = "7:8",
        backgroundColor = IndexedColors.LIGHT_ORANGE,
        fontSize = 12
    )
    @Excel(name = "入职时间", sort = 8, type = TypeEnum.EXPORT, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime hireDate;

    /**
     * 时间信息 - 更新时间
     * 表头配置：第一行显示"时间信息"，第二行显示"更新时间"
     */
    @ExcelHeader(
        rows = {"时间信息", "更新时间"},
        backgroundColor = IndexedColors.LIGHT_ORANGE,
        fontSize = 12
    )
    @Excel(name = "更新时间", sort = 9, type = TypeEnum.EXPORT, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;

    /**
     * 备注信息
     * 表头配置：第一行显示"备注信息"，第二行显示"备注"
     * 列合并：第9列到第9列（单列）
     */
    @ExcelHeader(
        rows = {"备注信息", "备注"},
        columnMerge = "9:9",
        backgroundColor = IndexedColors.GREY_25_PERCENT,
        fontSize = 12
    )
    @Excel(name = "备注", sort = 10, type = TypeEnum.EXPORT)
    private String remark;
} 